草庐IT

Java getNodeName 和命名空间

全部标签

同一命名空间内的 C++ 函数调用

在实现中使用“usingnamespace”关键字时,从同一命名空间调用另一个函数的正确方法是什么?我收到以下错误:Callto'bar'isambiguous编译时://Foo.hnamespaceFoo{voidbar();voidcallBar();}//Foo.cpp#include"Foo.h"usingnamespaceFoo;voidbar(){/*dosomething*/}voidcallBar(){bar();} 最佳答案 您似乎在cpp文件中提供了bar和callBar的定义。在这种情况下,您应该将函数放在声明

c++ - 来自 ISO C++ draft (n3290) : 3. 4.3.2/1 命名空间成员的一点

来自ISOC++草案(n3290)的一点:3.4.3.2/1命名空间成员Ifthenested-name-specifierofaqualified-idnominatesanamespace,thenamespecifiedafterthenested-name-specifierislookedupinthescopeofthenamespace.Ifaqualified-idstartswith::,thenameafterthe::islookedupintheglobalnamespace.Ineithercase,thenamesinatemplate-argumentof

c++ - 具有虚函数的类占用更多空间

有这样的代码:#includeclassA{inta;intfun(){}};classB{inta;virtualintfun(){}};intmain(){std::cout输出是:48为什么B类比A类大4个字节? 最佳答案 任何具有虚函数的类都需要一个指向该类虚函数表的指针。因此,有一个隐藏成员,即指针的大小。http://en.wikipedia.org/wiki/Virtual_method_table 关于c++-具有虚函数的类占用更多空间,我们在StackOverflow上

c++ - libc++ - bind() 的命名冲突?

令人惊讶的是,经过一些小改动后,我设法在我的Linux机器上安装了libc++(因为libstdc++缺少一些东西)。不幸的是,由于同名函数,我现有的一些代码现在已经损坏。通常,以我需要的方式,bind()与套接字相关。然而,libc++有它自己的bind()函数,它基本上是this但没有一个方便的命名空间来分隔它们。根据墨菲定律,编译器会尝试使用错误的函数,并报错。NetBeans没有发现任何问题,因为它实际上是在sys/socket.h文件中查找,它应该如此。因此,由于这两个函数基本上都超出了我的控制范围,我该如何告诉编译器(clang++)它应该在特定的header中查找,而不是

c++ - 为什么不能在头文件中单独写命名空间的层级?

我写了一些头文件。我想单独声明命名空间层次结构(为了清楚起见),然后声明函数和类。对我来说,它看起来像是文档中的目录。这对我来说非常方便:在一个地方查看namespace的完整层次结构。我这样写://Namespaceshierarchy:namespaceBushman{namespaceCAD_Calligraphy{}//...}//DeclarationsofclassesandfunctionsclassBushman::CAD_Calligraphy::Shp_ostream{public:explicitShp_ostream(std::ostream&ost);};但是

c++ - 为什么要依赖命名返回值优化?

我正在阅读有关NRVO的信息,并试图了解什么时候应该依赖它,什么时候不应该依赖它。现在我有一个问题:为什么要完全依赖NRVO?总是可以通过引用显式传递返回参数,那么有什么理由改用NRVO吗? 最佳答案 处理返回值比处理通过写入引用参数返回的方法简单得多。考虑以下两种方法CGetByRet(){...}voidGetByParam(C&returnValue){...}第一个问题是它无法链接方法调用Method(GetByRet());//vs.Ctemp;GetByParam(temp);Method(temp);它还提供类似aut

c++ - 让 C++ 推断类/命名空间的位置,其中定义了一个参数

此代码编译时没有任何警告或错误,并且是可执行的。templatestructtestclass{templateclassinner{};templatevoidf(inner){}};intmain(){testclasstest;test.f(testclass::inner());//l.13return0;}现在,我想做的是省略第13行中的testclass:::test.f(inner());它不起作用。有什么我可以添加到testclass的定义中,以便我的代码工作吗?允许使用C++11。 最佳答案 一般来说,没有允许这样

c++ - 正确使用 GetComputerName - 我是否需要为空字符保留额外的空间

我想知道,GetComputerName的正确用法是什么?.应该是吧TCHARcomputerName[1024+1];DWORDsize=1024;GetComputerName(computerName,&size);或TCHARcomputerName[1024];DWORDsize=1024;GetComputerName(computerName,&size); 最佳答案 lpnSize参数中传递的大小反射(reflect)了缓冲区中的可用空间量,包括空终止符的空间。您的任何一个语句都可以工作,因为在第一个语句中,您只是分

c++ - 如何正确使用命名空间避免名称冲突?

我对C++命名空间的正确使用有点困惑。我很清楚它们如何帮助避免冲突(名称冲突),但是当涉及到using关键字时,我就不清楚了。我的意思是,假设我有一部分代码放入命名空间,并创建一个类,比如说namespacemy{classvector{...};}当然,当我使用它时,我不想一直输入my::vector,所以我希望usingnamespacemy。但是,我最终可能需要std命名空间中的一些东西,然后我希望同时使用usingnamespacestd,但这会让我回到最初的名称冲突问题.我知道可以只“导入”我需要的功能,比如usingstd::set,但在这种情况下,导入标准命名空间似乎很自

c++ - 正确命名的临时对象和右值引用/移动

在C++11之前,作为一种标准的编程习惯,临时变量通常被分配给变量以使代码更清晰。对于小型类型,通常会制作一个拷贝,对于较大的类型,可能会制作一个引用,例如:inta=int_func();Tconst&obj=obj_func();some_func(a,obj);现在,将其与内联表单进行比较:some_func(int_func(),obj_func());在C++11之前,这具有几乎相同的语义。随着右值引用和移动语义的引入,上面的内容现在完全不同了。特别是,通过强制obj键入Tconst&,您已经删除了使用移动构造函数的能力,而内联形式的类型可以是T&&代替。鉴于第一个是通用范例